package com.campuscrowdsourcing.server.domain.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

/**
 * <p>
 * 任务信息		salary、score自动填充0		若发起者、父级任务被删除，该信息直接删除	若接受者、任务查看权限被删除，接受者、任务查看权限一栏设置为空	若任务类型被删除，由于存在该类型的任务，故该类型不允许被删除	任何外键信息更新时，该信息随之更新		任务接受者仅有一次修改任务查看权限的机会（生成信息时）	若任务查看权限不为空接受者必须为对应团队的管理员	若任务查看权限不为空则报酬与对应的团队对接，接受任务的管理员	若任务查看权限不为空且该团队不存在则不允许提交完成任务		接受者接受任务的团队内的管理员及以上权限者可以创建该任务的子任务	子任务的奖励以积分的形式表现	积分当且仅当为子任务时可填写	查看权限(为空时所有用户可见,否则为团队id)		任务的创建时间和更新时间不需要手动修改,信息建立时更新创建时间,修改时更新 更新时间	
 * </p>
 *
 * @author Xinyuan Zhao
 * @since 2023-03-14
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("task")
public class Task implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 任务ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 父级任务
     */
    @TableField("pid")
    private Integer pid;

    /**
     * 任务名称
     */
    @NotEmpty
    @TableField("name")
    private String name;

    /**
     * 任务类型
     */
    @TableField("type")
    private Integer type;

    /**
     * 需求
     */
    @TableField("requirements")
    private String requirements;

    /**
     * 报酬
     */
    @TableField("salary")
    private Integer salary;

    /**
     * 积分奖励
     */
    @TableField("score")
    private Integer score;

    /**
     * 难度
     */
    @TableField("difficulty")
    private Integer difficulty;

    /**
     * 发起者
     */
    @TableField("author")
    private Integer author;

    /**
     * 接受者
     */
    @TableField("worker")
    private Integer worker;

    /**
     * 查看权限
     */
    @TableField("role")
    private Integer role;

    /**
     * 是否通过审核
     */
    @TableField("audit")
    private Boolean audit;

    /**
     * 是否完成
     */
    @TableField("finish")
    private Boolean finish;

    /**
     * 发布文件
     */
    @TableField("file_in")
    private String fileIn;

    /**
     * 接收文件
     */
    @TableField("file_out")
    private String fileOut;

    /**
     * 图片
     */
    @TableField("img")
    private String img;

    /**
     * 截止时间
     */
    @TableField("deadtime")
    @NotNull
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime deadtime;

    /**
     * 创建时间
     */
    @TableField("createtime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createtime;

    /**
     * 更新时间
     */
    @TableField("updatetime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updatetime;

    /**
     * 软删除
     */
    @TableField("is_deleted")
    @TableLogic
    private Integer isDeleted;


}
